import { resolve } from 'path'
import pkg from './package.json'
import vue from '@vitejs/plugin-vue'
// vue-jsx 插件说明 https://github.com/vuejs/jsx-next/blob/dev/packages/babel-plugin-jsx/README-zh_CN.md
import vueJsx from '@vitejs/plugin-vue-jsx'
import { svgLoader } from './src/utils/svg-loader.js'
import { visualizer } from 'rollup-plugin-visualizer';
import viteImagemin from 'vite-plugin-imagemin'
import { loadEnv } from "vite";

const { dependencies, devDependencies, name, version } = pkg

const __APP_INFO__ = {
  pkg: { dependencies, devDependencies, name, version },
  lastBuildTime: new Date().toLocaleString()
}
const root = process.cwd();

// 官方文档 https://cn.vitejs.dev/config/
export default ({ command, mode }) => {
  return {
    base: './',
    publicPath: './',

    server: {
      hmr: { overlay: false }, // 禁用或配置 HMR 连接 设置 server.hmr.overlay 为 false 可以禁用服务器错误遮罩层

      // 服务配置
      host:'0.0.0.0',
      port: 8086, // 类型： number 指定服务器端口;
      open: true, // 类型： boolean | string在服务器启动时自动在浏览器中打开应用程序；
      cors: true, // 类型： boolean | CorsOptions 为开发服务器配置 CORS。默认启用并允许任何源
      proxy: {
        // 类型： Record<string, string | ProxyOp 为开发服务器配置自定义代理规则
        '/api': {
          target: loadEnv(mode, root).VITE_APP_BASE_API,
          changeOrigin: true,
          secure: false,
          rewrite: (path) => path.replace('/api', '')
        },
        '/up': {
          target: 'http://ankangceshi.oss-cn-beijing.aliyuncs.com',
          changeOrigin: true,
          secure: false,
          rewrite: (path) => path.replace('/up', '')
        }
      }
    },

    build: {
      brotliSize: false, // 禁用 brotli 压缩大小报告,以提高大型项目的构建性能。
      compress:{
        drop_console: true, // 打包时删除console
        drop_debugger: true, // 打包时删除 debugger
      },
      output:{
        comments: true,
      }
    },

    plugins: [vue(), vueJsx({}), svgLoader('/src/assets/svg/'),
      // visualizer({
      //   emitFile: false,
      //   file: "stats.html", //分析图生成的文件名
      //   open:true //如果存在本地服务端口，将在打包后自动展示
      // }),
      viteImagemin({
        gifsicle: {
          optimizationLevel: 7,
          interlaced: false
        },
        optipng: {
          optimizationLevel: 7
        },
        mozjpeg: {
          quality: 20
        },
        pngquant: {
          quality: [0.8, 0.9],
          speed: 4
        },
        svgo: {
          plugins: [
            {
              name: 'removeViewBox'
            },
            {
              name: 'removeEmptyAttrs',
              active: false
            }
          ]
        }
      })
    ],

    resolve: {
      alias: {
        '@': resolve(__dirname, 'src'), // 别名 `@` 指向 `src`
        assets: '/src/assets',
        components: '/src/components',
        views: '/src/views',
        utils: '/src/utils'
      }
    },
    // 定义全局常量替换方式,其中每项在开发环境下会被定义在全局，而在构建时被静态替换
    define: {
      __APP_INFO__: JSON.stringify(__APP_INFO__)
    },

    css: {
      preprocessorOptions: {
        scss: {
          // additionalData: '@import "@/styles/_variables";',
          javascriptEnabled: true
        }
      }
    }
  }
}
